export default (ctx, next) => {
  return next().catch((err) => {
    if (401 == err.status) {
      ctx.status = 401;
      ctx.body = {
        code: 401,
        msg: "无权访问",
      };
    } else {
      // throw err;
      ctx.status = err.status || 500;
      ctx.body = Object.assign({
        code: 500,
        msg: err.message
      },  process.env.NODE_ENV === "dev" ? {
        stack: err.stack 
      } : {});
    }
  });
};

// 另一种错误捕捉办法
// app.use(async (ctx, next) => {
//   try {
//     await next();
//   } catch (err) {
//     ctx.status = err.status || 500;
//     ctx.body = err.message;
//     ctx.app.emit('error', err, ctx);
//   }
// });

// app.on('error', (err, ctx) => {
//   /* centralized error handling:
//    *   console.log error
//    *   write error to log file
//    *   save error and request information to database if ctx.request match condition
//    *   ...
//   */
// });